package com.aaa.methodreference.demo02;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: 方法引用的使用场景
 * 方法引用的分类
 *      类型                  语法              对应的Lambda表达式
 * 静态方法的引用          类名::staticMethod    (args)->类名.staticMethod(args)
 * 实例方法的引用          inst::instMethod      (args)->inst.instMethod(args)
 * 对象方法的引用          类名::instMethod      (args)->inst.instMethod(args)
 * 构建方法的引用          类名::new             (args)->new 类名(args)
 * @date 2022/11/4
 */
public class Test01 {
    /*静态方法引用
    当Lambda表达式中，通过类名引用了一个已经存在的静态方法时，而且仅有一条语句*/
    public static void main(String[] args) {
        //void accept(T t);
        //Consumer<int[]> consumer=(arr)->{Test01.sum(arr);};
        //观察发现Lambda表达式中有且仅有一条一句，而且这条语句是调用了已经存在的方法

        /*Consumer<T> 消费型函数式接口-----静态方法引用
        静态方法的引用     类名::staticMethod    (args)->类名.staticMethod(args)*/
        Consumer<int[]> consumer=Test01::sum;
        int[] arr={4,2,7,3,9,6,8,1};
        consumer.accept(arr);
    }
    public static void sum(int[] arr){
        int sum=0;
        for (int i : arr) {
            sum+=i;
        }
        System.out.println("数组中元素的和："+sum);
    }
    @Test
    public void Test02(){
        List<Integer> list = new ArrayList<>();

        list.add(2);
        list.add(6);
        list.add(4);
        list.add(1);
        list.add(5);
        //Comparator<Integer> comparator=(o1, o2) -> Integer.compare(o1,o2);
        Comparator<Integer> comparator=Integer::compare;
        Collections.sort(list,comparator);
        System.out.println(list);
    }
}
